home *** CD-ROM | disk | FTP | other *** search
- Path: seismo!uunet!rs
- From: rs@uunet.UU.NET (Rich Salz)
- Newsgroups: comp.sources.unix
- Subject: v10i007: Crypt Breaker's Workbench, Part07/11
- Message-ID: <389@uunet.UU.NET>
- Date: 19 Jun 87 03:16:12 GMT
- Organization: UUNET Communications Services, Arlington, VA
- Lines: 1381
- Approved: rs@uunet.uu.net
-
- Submitted by: Robert W. Baldwin <BALDWIN@XX.LCS.MIT.EDU>
- Mod.sources: Volume 10, Issue 7
- Archive-name: cbw/Part07
-
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then unpack
- # it by saving it into a file and typing "sh file". To overwrite existing
- # files, type "sh file -c". You can also feed this as standard input via
- # unshar, or by typing "sh <file", e.g.. If this archive is complete, you
- # will see the following message at the end:
- # "End of archive 7 (of 11)."
- # Contents: dblock.c test3.perm
- # Wrapped by rs@uunet on Wed Jun 17 18:17:24 1987
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f dblock.c -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"dblock.c\"
- else
- echo shar: Extracting \"dblock.c\" \(18401 characters\)
- sed "s/^X//" >dblock.c <<'END_OF_dblock.c'
- X/*
- X * Decrytion block and its label.
- X *
- X * Robert W. Baldwin, December 1984.
- X */
- X
- X
- X#include <stdio.h>
- X#include "window.h"
- X#include "terminal.h"
- X#include "layout.h"
- X#include "specs.h"
- X
- X
- X/* Relative layout constants. */
- X
- X#define TOPROW 2 /* First non-blank row. */
- X#define BOTROW (TOPROW+2*(NLINES-1)) /* First non-blank row. */
- X#define DBSHELP \
- X "^G: undo, ^T: tryall, ^W: wrdsrch, F2 F1: next prev block"
- X#define WIREWIDTH 23 /* Number of chars from WIREFORMAT */
- X#define WIREFORMAT "Know %3d of 128 wires "
- X#define WIRECOL (LINELEN - WIREWIDTH + 1) /* Starting column. */
- X#define BLOCKFORMAT "Block - %d"
- X
- X/* Keystroke handler for decryption block storage. */
- X
- Xextern dbsup(), dbsdown(), dbsleft(), dbsright();
- Xextern dbskey();
- Xextern dbsundo();
- Xextern dbsdelf();
- Xextern dbsdelb();
- Xextern dbsnxtblk();
- Xextern dbsprvblk();
- Xextern dbstryall();
- Xextern dbswrdsrch();
- X
- Xkeyer dbsktab[] = {
- X {CTRYALL, dbstryall},
- X {CWRDSRCH, dbswrdsrch},
- X {CNEXTBLOCK, dbsnxtblk},
- X {CPREVBLOCK, dbsprvblk},
- X {CGO_UP, dbsup},
- X {CGO_DOWN, dbsdown},
- X {CGO_LEFT, dbsleft},
- X {CGO_RIGHT, dbsright},
- X {CUNDO, dbsundo},
- X {CDELF, dbsdelf},
- X {CDELB, dbsdelb},
- X {CINSERT, dbskey},
- X {CRETURN, dbskey}, /* Special case return key. */
- X {0, NULL},
- X };
- X
- X
- X
- X/* Private data for the decryption block storage. */
- X
- X#include "dblock.h"
- X
- Xchar mcbuf[BLOCKSIZE+1]; /* Static buffer for now. */
- Xint mpbuf[BLOCKSIZE+1]; /* Static buffer for now. */
- Xint moperm[BLOCKSIZE+1]; /* Static buffer for now. */
- Xchar mmbuf[BLOCKSIZE+1]; /* Static buffer for now. */
- Xint mcmdbuf[BLOCKSIZE+1]; /* Static buffer for now. */
- X
- Xdbsinfo dbsprivate;
- X
- X
- X
- X/* Window for the decryption block label. */
- X
- Xdispline dblline1 = {
- X DBLROW,1, /* Origin. */
- X 1,DBWIDTH, /* Height and width. */
- X 1,1, /* Init (relative) cursor position */
- X NULL, /* No private data. */
- X wl_setcur, /* Firstime = restore cursor pos. */
- X wl_noop, /* Lasttime = do nothing. */
- X wl_dldraw, /* Default dispaly line draw routine */
- X dokey, /* Default keystroke handler. */
- X arwktab, /* Basic arrow keystroke handler. */
- X 1,DBWIDTH, /* Min and Max col for cursor. */
- X};
- X
- Xdispline *dbllines[] = {
- X &dblline1, /* List of lines for the label. */
- X NULL,
- X};
- X
- Xtwindow dblabel = {
- X DBLROW,1, /* Origin. */
- X 1,DBWIDTH, /* Height and width. */
- X 1,1, /* Init (relative) cursor position */
- X NULL, /* No private info. */
- X wl_setcur, /* Firstime = restore cursor pos. */
- X wl_noop, /* Lasttime = do nothing. */
- X wl_twdraw, /* Simple draw routine. */
- X dokey, /* Default keystroke handler. */
- X arwktab, /* Basic arrow keystroke handler. */
- X dbllines,
- X};
- X
- X
- X/* Window for the decrytion block. */
- X
- Xextern int dbsdraw();
- Xextern int dbsfirst();
- Xextern int dbslast();
- X
- Xgwindow dbstore = {
- X DBSROW,1, /* Origin. */
- X DBHEIGHT,DBWIDTH, /* Height and width. */
- X TOPROW,1, /* Initial cursor position */
- X ((char *)&dbsprivate), /* Info about current block. */
- X dbsfirst, /* Firstime */
- X dbslast, /* Lasttime */
- X dbsdraw, /* Draw routine. */
- X dokey, /* Default keystroke handler. */
- X dbsktab, /* Arrow keystroke handler. */
- X};
- X
- X
- X
- X/* Initialize the decrypted block label, and return a ptr to it.
- X */
- Xgwindow *(idblabel())
- X{
- X displine *line;
- X
- X line = dblabel.dlines[0];
- X clrdline(line);
- X return ((gwindow *) &dblabel);
- X}
- X
- X
- X/* Set the block number in the label.
- X * The argument, num, is displayed as it, it is not zero adjusted.
- X * The cursor is not moved, and the window is redisplayed.
- X */
- Xdblbnum(label, num)
- Xtwindow *label;
- Xint num;
- X{
- X int row,col;
- X
- X row = rowcursor();
- X col = colcursor();
- X
- X sprintf(statmsg, BLOCKFORMAT, num);
- X setrange(label->dlines[0], statmsg, 1, WIRECOL-1);
- X wl_dldraw(label->dlines[0]);
- X setcursor(row, col);
- X}
- X
- X
- X/* Set the known wire number in the label.
- X * The argument, num, is displayed as it, it is not zero adjusted.
- X * The cursor is not moved, and the window is redisplayed.
- X */
- Xdblpcount(label, num)
- Xtwindow *label;
- Xint num;
- X{
- X int row,col;
- X
- X row = rowcursor();
- X col = colcursor();
- X
- X sprintf(statmsg, WIREFORMAT, num);
- X setnadline(label->dlines[0], statmsg, WIRECOL);
- X wl_dldraw(label->dlines[0]);
- X setcursor(row, col);
- X}
- X
- X
- X
- X/* Initialize the decryption block storage, and return a ptr to it.
- X * Reads in cipher block from the file named by cipherfile.
- X * If errors occur, a message is put in the status area.
- X */
- Xgwindow *(idbstore())
- X{
- X gwindow *dbs;
- X dbsinfo *dbsi;
- X FILE *fd;
- X
- X dbs = &dbstore;
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X
- X dbsi->cbuf = mcbuf;
- X dbsi->blknum = 0;
- X fillcbuf(dbsi->blknum, dbsi->cbuf);
- X dbsi->perm = refperm(dbsi->blknum);
- X dbsi->pbuf = mpbuf;
- X dbsi->mbuf = mmbuf;
- X dbsi->cmdbuf = mcmdbuf;
- X dbsi->operm = moperm;
- X
- X dbsinit(dbsi);
- X
- X return (dbs);
- X}
- X
- X
- X/* Initialize the private data.
- X * Requires that the cipherblock and permutation have already been loaded.
- X * The plaintext is decoded from the ciphertext and permutation.
- X * Updates the label display.
- X */
- Xdbsinit(dbsi)
- Xdbsinfo *dbsi;
- X{
- X int i;
- X
- X dbsi->wirecnt = permwcount(dbsi->perm);
- X dbsi->cmdloc = 0;
- X dbsi->cmdnext = 0;
- X dbsi->cmdbuf[0] = 0;
- X dblbnum(&dblabel, dbsi->blknum);
- X dblpcount(&dblabel, dbsi->wirecnt);
- X
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X dbsi->operm[i] = dbsi->perm[i];
- X dbsi->mbuf[i] = FALSE;
- X }
- X
- X decode(dbsi->cbuf, dbsi->pbuf, dbsi->perm);
- X}
- X
- X
- X
- X/* Atomically merge the given permutation into the current one.
- X * The current one is not changed if any conflicts are detected.
- X * Updates the display and plaintext buffer.
- X * Does setup to allow an undo.
- X * Return TRUE if suceesful.
- X */
- Xint dbsmerge(dbs, perm)
- Xgwindow *dbs; /* Ptr to dbstore */
- Xint perm[]; /* Permutation */
- X{
- X int i;
- X dbsinfo *dbsi;
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X
- X /* Check for conflicts, display msg if so. */
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X if (perm[i] != NONE && dbsi->perm[i] != NONE
- X && perm[i] != dbsi->perm[i]) {
- X sprintf(statmsg, "Guess conflicts with current plaintext!");
- X usrstatus(&user, statmsg);
- X return(FALSE);
- X }
- X }
- X
- X /* Use dbssperm to set the guess. Save old perm for undo. */
- X dbsi->cmdnext = 0;
- X dbsi->cmdloc = dbsrc2pos(dbs->wcur_row, dbs->wcur_col);
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X dbsi->operm[i] = dbsi->perm[i];
- X }
- X
- X dbsrmarks(dbs);
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X if (perm[i] != NONE && perm[i] > i && dbsi->perm[i] == NONE) {
- X dbsswire(dbs, i, perm[i]);
- X }
- X }
- X
- X sprintf(statmsg, "Sucessful merge.");
- X usrstatus(&user, statmsg);
- X dbsi->wirecnt = permwcount(dbsi->perm);
- X dblpcount(&dblabel, dbsi->wirecnt);
- X return(TRUE);
- X}
- X
- X
- X/* Undo the last command.
- X * Copy the old permutation into the current one,
- X * recompute the plaintext, and update the display.
- X * Move the cursor back to where it was.
- X */
- Xdbsundo(dbs)
- Xgwindow *dbs;
- X{
- X int i;
- X dbsinfo *dbsi;
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X dbsi->mbuf[i] = FALSE;
- X dbsi->perm[i] = dbsi->operm[i];
- X }
- X decode(dbsi->cbuf, dbsi->pbuf, dbsi->perm);
- X dbsdraw(dbs);
- X
- X dbsi->wirecnt = permwcount(dbsi->perm);
- X dblpcount(&dblabel, dbsi->wirecnt);
- X usrstatus(&user, "Command undone.");
- X wl_setcur(dbs, dbsp2row(dbsi->cmdloc), dbsp2col(dbsi->cmdloc));
- X}
- X
- X
- X
- X/* (re)Draw the window.
- X */
- Xdbsdraw(dbs)
- Xgwindow *dbs;
- X{
- X int i;
- X int row, col;
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X if (i%LINELEN == 0) {
- X wl_setcur(dbs, dbsp2row(i), dbsp2col(i));
- X }
- X plnchars(1, char2sym(dbsi->pbuf[i]));
- X }
- X
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X if (i%LINELEN == 0) {
- X wl_setcur(dbs, dbsp2row(i)+1, dbsp2col(i));
- X }
- X if (dbsi->mbuf[i]) {
- X plnchars(1, SUNDERLINE);
- X }
- X else {
- X plnchars(1, ' ');
- X }
- X }
- X
- X for (i = dbsp2row(BLOCKSIZE) ; i <= DBHEIGHT ; i++) {
- X wl_setcur(dbs, i, 1);
- X plnchars(LINELEN, ' ');
- X }
- X for (i = 1 ; i < dbsp2row(0) ; i++) {
- X wl_setcur(dbs, i, 1);
- X plnchars(LINELEN, ' ');
- X }
- X
- X for (i = 1 ; i <= DBHEIGHT ; i++) {
- X wl_setcur(dbs, i, LINELEN+1);
- X plnchars(dbs->wwidth - LINELEN, ' ');
- X }
- X
- X wl_setcur(dbs, row, col);
- X
- X}
- X
- X
- X
- X/* Draw the plaintext characters on the screen.
- X * Does not change the cursor position.
- X */
- Xdbsdpbuf(dbs)
- Xgwindow *dbs;
- X{
- X int i;
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X dbsdpchar(dbs, i, dbsi->pbuf[i]);
- X }
- X}
- X
- X
- X/* Display the given plaintext character at the given cipher block position.
- X * Cipher block positions are zero-based.
- X * Handles mapping of block positions to window coordinates.
- X * It does not move the cursor.
- X * It does set pbuf.
- X */
- Xdbsdpchar(dbs, pos, pchar)
- Xgwindow *dbs;
- Xint pos;
- Xint pchar; /* -1 means no char. */
- X{
- X int row, col; /* Original position. */
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X wl_setcur(dbs, dbsp2row(pos), dbsp2col(pos));
- X plnchars(1, char2sym(pchar));
- X dbsi->pbuf[pos] = pchar;
- X wl_setcur(dbs, row, col);
- X}
- X
- X
- X
- X/* Convert cipher block position to window row coordinate.
- X */
- Xdbsp2row(pos)
- Xint pos;
- X{
- X return(TOPROW + 2*(pos/LINELEN));
- X}
- X
- X
- X/* Convert cipher block position to window column coordinate.
- X */
- Xdbsp2col(pos)
- Xint pos;
- X{
- X return(1 + (pos%LINELEN));
- X}
- X
- X
- X/* Convert window row and column positions into a cipher block position.
- X */
- Xint dbsrc2pos(row, col)
- Xint row, col;
- X{
- X return( ((row-TOPROW)/2)*LINELEN + (col-1) );
- X}
- X
- X
- X
- X/* Reset all the character marks that are set and update the display.
- X */
- Xdbsrmarks(dbs)
- Xgwindow *dbs;
- X{
- X int i;
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X if (dbsi->mbuf[i]) dbscmark(dbs, i);
- X }
- X}
- X
- X
- X/* (re)Draw all the set character marks.
- X * Assumes that the window has been erased.
- X * Cursor restored to its original place.
- X */
- Xdbsdmarks(dbs)
- Xgwindow *dbs;
- X{
- X int i;
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X if (dbsi->mbuf[i]) {
- X dbssmark(dbs, i);
- X }
- X }
- X}
- X
- X
- X/* Set a mark under the given cipher block position and
- X * update the mark flags.
- X * Doesn't change the cursor position.
- X */
- Xdbssmark(dbs, pos)
- Xgwindow *dbs;
- X{
- X int row, col; /* Original position. */
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X wl_setcur(dbs, 1+dbsp2row(pos), dbsp2col(pos));
- X plnchars(1, SUNDERLINE);
- X dbsi->mbuf[pos] = TRUE;
- X
- X wl_setcur(dbs, row, col);
- X}
- X
- X
- X/* Clear the mark under the given cipher block position and
- X * update the mark flags.
- X * Doesn't change the cursor position.
- X */
- Xdbscmark(dbs, pos)
- Xgwindow *dbs;
- X{
- X int row, col; /* Original position. */
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X wl_setcur(dbs, 1+dbsp2row(pos), dbsp2col(pos));
- X plnchars(1,' ');
- X dbsi->mbuf[pos] = FALSE;
- X
- X wl_setcur(dbs, row, col);
- X}
- X
- X
- X
- X/* Set the permutation to reflect the fact that the
- X * character at pos is pchar.
- X * Update the display to reflect the changes.
- X * Highlight all changes.
- X * Add the character to the command string, clearing the old
- X * marks if this is the first command character.
- X * By setting pchar to NONE, this can be used to clear the permutation.
- X * The cursor position is not changed.
- X */
- Xdbssperm(dbs, pos, pchar)
- Xgwindow *dbs;
- Xint pos;
- Xint pchar;
- X{
- X int i;
- Xreg dbsinfo *dbsi;
- X char *p;
- X int x; /* Shifted up cipher text character. */
- X int y; /* Shifted up plain text character. */
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X
- X if (dbsi->cmdnext == 0) { /* Starting new command. */
- X dbsrmarks(dbs);
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X dbsi->operm[i] = dbsi->perm[i];
- X }
- X dbsi->cmdloc = pos;
- X }
- X dbsi->cmdbuf[dbsi->cmdnext++] = pchar;
- X
- X if (pchar == NONE) { /* Just clear the permutation. */
- X x = (dbsi->cbuf[pos] + pos) & MODMASK;
- X y = dbsi->perm[x];
- X if (y != NONE) dbscwire(dbs, x, y&MODMASK);
- X return;
- X }
- X
- X x = (dbsi->cbuf[pos] + pos) & MODMASK;
- X y = (pchar + pos) & MODMASK;
- X dbsswire(dbs, x, y);
- X}
- X
- X
- X/* Clear the wiring for perm[x] equals y and update the display.
- X * Requires that x be in fact wired to y.
- X */
- Xdbscwire(dbs, x, y)
- Xgwindow *dbs;
- Xint x, y;
- X{
- X int i;
- X dbsinfo *dbsi;
- X char *p;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X if (dbsi->perm[x] != y || x == NONE) return;
- X if (y != NONE) dbsi->wirecnt--;
- X
- X permchgflg = TRUE;
- X x = x&MODMASK;
- X y = y&MODMASK;
- X dbsi->perm[x] = NONE;
- X dbsi->perm[y] = NONE;
- X
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X if ( ((((dbsi->cbuf[i])+i)&MODMASK) == x)
- X || ((((dbsi->cbuf[i])+i)&MODMASK) == y) ) {
- X dbsdpchar(dbs, i, NONE);
- X dbscmark(dbs, i);
- X }
- X }
- X
- X}
- X
- X
- X/* Set the wiring for perm[x] equals y and update the display.
- X * Clear any wiring that was set.
- X * Requires x and y not be NONE.
- X */
- Xdbsswire(dbs, x, y)
- Xgwindow *dbs;
- Xint x, y;
- X{
- X int i;
- X char *p;
- X dbsinfo *dbsi;
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X
- X if (x == NONE || y == NONE) return;
- X x = x&MODMASK;
- X y = y&MODMASK;
- X permchgflg = TRUE;
- X
- X if (dbsi->perm[x] != y) {
- X if (dbsi->perm[x] != NONE) dbscwire(dbs, x, dbsi->perm[x]);
- X if (dbsi->perm[y] != NONE) dbscwire(dbs, y, dbsi->perm[y]);
- X }
- X if (dbsi->perm[x] == NONE) dbsi->wirecnt++;
- X dbsi->perm[x] = y;
- X dbsi->perm[y] = x;
- X
- X for (i = 0 ; i < BLOCKSIZE ; i++) {
- X if ((((dbsi->cbuf[i])+i)&MODMASK) == x) {
- X dbsi->pbuf[i] = (y - i) & MODMASK;
- X }
- X else if ((((dbsi->cbuf[i])+i)&MODMASK) == y) {
- X dbsi->pbuf[i] = (x - i) & MODMASK;
- X }
- X else {continue;}
- X dbsdpchar(dbs, i, dbsi->pbuf[i]); /* Found one. */
- X dbssmark(dbs, i);
- X }
- X}
- X
- X
- X
- X/* Behavior when cursor enters the window.
- X * Indicate that we are at the beginning of a command.
- X * Put up help message.
- X */
- Xdbsfirst(dbs, row, col)
- Xgwindow *dbs;
- Xint row, col; /* Relative to window's origin. */
- X{
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X dbsi->cmdnext = 0;
- X usrhelp(&user, DBSHELP);
- X wl_setcur(dbs, dbs->wcur_row, col);
- X}
- X
- X
- X/* Behavior when cursor leaves the window.
- X * Complete the command and give it to the history window.
- X */
- Xdbslast(dbs)
- Xgwindow *dbs;
- X{
- X dbscmddone(dbs);
- X}
- X
- X
- X/* A command may be done, if so, send it to the history window.
- X * Setup for undo.
- X */
- Xdbscmddone(dbs)
- Xgwindow *dbs;
- X{
- X int i;
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X if (dbsi->cmdnext != 0) {
- X dbsi->cmdbuf[dbsi->cmdnext++] = 0;
- X/* hstadd(&history, dbsi->cmdbuf);
- X*/
- X dbsi->cmdnext = 0;
- X }
- X}
- X
- X
- X
- X/* Cursor movement commands.
- X * Keep the cursor on the pchar lines.
- X * Moving off the end of a line advances to the next or previous line.
- X * Moving the cursor also terminates any command that might
- X * have been entered.
- X */
- Xdbsup(dbs, k)
- Xgwindow *dbs;
- X{
- X int row, col; /* Current relative cursor position. */
- X
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X if (row <= TOPROW) {
- X wl_setcur(dbs, 1, col);
- X dbs->wcur_row = TOPROW;
- X jogcursor(1);
- X if (wl_hascur(dbs))
- X wl_rcursor(dbs);
- X }
- X else {
- X jogup(dbs, k);
- X jogup(dbs, k);
- X }
- X dbscmddone(dbs);
- X}
- X
- Xdbsdown(dbs, k)
- Xgwindow *dbs;
- X{
- X int row, col; /* Current relative cursor position. */
- X
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X if (row >= BOTROW) {
- X wl_setcur(dbs, DBHEIGHT, col);
- X dbs->wcur_row = BOTROW;
- X jogcursor(2);
- X if (wl_hascur(dbs))
- X wl_rcursor(dbs);
- X }
- X else {
- X jogdown(dbs, k);
- X jogdown(dbs, k);
- X }
- X dbscmddone(dbs);
- X}
- X
- Xdbsleft(dbs, k)
- Xgwindow *dbs;
- X{
- X int row, col; /* Current relative cursor position. */
- X
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X dbsprev(dbs);
- X dbscmddone(dbs);
- X}
- X
- Xdbsright(dbs, k)
- Xgwindow *dbs;
- X{
- X int row, col; /* Current relative cursor position. */
- X
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X dbsnext(dbs);
- X dbscmddone(dbs);
- X}
- X
- X
- X/* Backup the cursor to the previous position without terminating
- X * a command.
- X */
- Xdbsprev(dbs)
- Xgwindow *dbs;
- X{
- X int row, col; /* Current relative cursor position. */
- X
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X if (col <= 1 && row <= TOPROW) {
- X }
- X else if (col <= 1) {
- X wl_setcur(dbs, row-2, LINELEN);
- X }
- X else {
- X jogleft(dbs);
- X }
- X}
- X
- X
- X/* Advance the cursor to the next position without terminating
- X * a command.
- X */
- Xdbsnext(dbs)
- Xgwindow *dbs;
- X{
- X int row, col; /* Current relative cursor position. */
- X
- X row = dbs->wcur_row;
- X col = dbs->wcur_col;
- X
- X if (col >= LINELEN && row >= BOTROW) {
- X }
- X else if (col >= LINELEN) {
- X wl_setcur(dbs, row+2, 1);
- X }
- X else {
- X jogright(dbs);
- X }
- X}
- X
- X
- X
- X/* Add the character to the permutation.
- X */
- Xdbskey(dbs, k)
- Xgwindow *dbs;
- Xint k;
- X{
- X int pos; /* plaintext block position. */
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X pos = dbsrc2pos(dbs->wcur_row, dbs->wcur_col);
- X dbssperm(dbs, pos, k & CHARM);
- X dbsnext(dbs);
- X dblpcount(&dblabel, dbsi->wirecnt);
- X}
- X
- X
- X
- X/* Delete forward.
- X * Clear the wiring due to the character at the current position,
- X * and update the display.
- X * The cursor moves forward one position.
- X */
- Xdbsdelf(dbs)
- Xgwindow *dbs;
- X{
- X int pos; /* plaintext block position. */
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X pos = dbsrc2pos(dbs->wcur_row, dbs->wcur_col);
- X
- X dbssperm(dbs, pos, NONE);
- X dbsnext(dbs);
- X dblpcount(&dblabel, dbsi->wirecnt);
- X}
- X
- X
- X
- X/* Delete backwards.
- X * Clear the wiring due to the character at the previous position,
- X * and update the display.
- X * The cursor moves backwards one position.
- X */
- Xdbsdelb(dbs)
- Xgwindow *dbs;
- X{
- X int pos; /* plaintext block position. */
- X dbsinfo *dbsi;
- X
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X pos = dbsrc2pos(dbs->wcur_row, dbs->wcur_col);
- X if (pos == 0) return;
- X pos = pos - 1;
- X
- X dbssperm(dbs, pos, NONE);
- X dbsprev(dbs);
- X dblpcount(&dblabel, dbsi->wirecnt);
- X}
- X
- X
- X
- X/* Advance to the next cipher text block (if any).
- X */
- Xdbsnxtblk(dbs)
- Xgwindow *dbs;
- X{
- X dbsinfo *dbsi;
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X
- X dbssetblk(dbs, dbsi->blknum + 1);
- X}
- X
- X
- X/* Backup to the previous cipher text block (if any).
- X */
- Xdbsprvblk(dbs)
- Xgwindow *dbs;
- X{
- X dbsinfo *dbsi;
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X
- X dbssetblk(dbs, dbsi->blknum - 1);
- X}
- X
- X
- X/* Jump to a particular block number.
- X * Get a new permutation and update the display.
- X * Even if the block number hasn't change, the permutation may have,
- X * so we must re-decode the block.
- X */
- Xdbssetblk(dbs, blocknum)
- Xgwindow *dbs;
- Xint blocknum;
- X{
- X dbsinfo *dbsi;
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X
- X if (fillcbuf(blocknum, dbsi->cbuf)
- X && (dbsi->perm = refperm(blocknum))) {
- X dbsi->blknum = blocknum;
- X dbsinit(dbsi);
- X dbsdraw(dbs);
- X usrstatus(&user, "Ready.");
- X }
- X else {
- X usrstatus(&user, "Block number is out of range.");
- X }
- X}
- X
- X
- X/* Return the number of the current block.
- X */
- Xdbsgetblk(dbs)
- Xgwindow *dbs;
- X{
- X dbsinfo *dbsi;
- X dbsi = ((dbsinfo *) dbs->wprivate);
- X
- X return(dbsi->blknum);
- X}
- END_OF_dblock.c
- if test 18401 -ne `wc -c <dblock.c`; then
- echo shar: \"dblock.c\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- if test -f test3.perm -a "${1}" != "-c" ; then
- echo shar: Will not over-write existing file \"test3.perm\"
- else
- echo shar: Extracting \"test3.perm\" \(16800 characters\)
- sed "s/^X//" >test3.perm <<'END_OF_test3.perm'
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X 96 114 124 223 97 19 -1 13 43 44
- X -1 38 231 7 -1 207 179 134 133 5
- X -1 -1 48 160 152 93 162 -1 191 127
- X 65 103 183 -1 -1 193 243 242 11 180
- X 87 173 154 8 9 99 112 58 22 108
- X199 95 77 66 -1 62 128 190 47 79
- X215 109 55 245 73 30 53 178 214 82
- X201 138 206 64 240 -1 228 52 140 59
- X197 -1 69 203 -1 111 137 40 -1 139
- X -1 195 212 25 -1 51 0 4 251 45
- X -1 122 148 31 227 234 167 202 49 61
- X219 85 46 246 1 -1 -1 254 211 249
- X144 255 101 218 2 150 186 29 56 -1
- X -1 247 164 18 17 -1 -1 86 71 89
- X 78 205 -1 222 120 216 226 158 102 189
- X125 225 24 -1 42 159 221 188 147 155
- X 23 210 26 -1 132 232 184 106 -1 -1
- X -1 196 253 41 204 -1 -1 235 67 16
- X 39 192 -1 32 166 -1 126 224 157 149
- X 57 28 181 35 241 91 171 80 -1 50
- X -1 70 107 83 174 141 72 15 -1 233
- X161 118 92 244 68 60 145 -1 123 110
- X237 156 143 3 187 151 146 104 76 239
- X -1 12 165 209 105 177 -1 220 -1 229
- X 74 194 37 36 213 63 113 131 -1 119
- X -1 98 -1 172 117 121
- X 20 122 118 119 -1 229 158 -1 223 -1
- X215 -1 197 249 82 126 237 23 87 93
- X 0 -1 252 17 -1 -1 -1 225 -1 163
- X 52 171 -1 155 214 -1 84 -1 216 85
- X 45 152 -1 181 -1 40 241 235 142 210
- X -1 69 30 83 99 134 212 253 70 144
- X -1 -1 234 -1 132 250 173 114 95 51
- X 58 -1 73 72 175 168 211 -1 92 169
- X176 166 14 53 36 39 -1 18 148 117
- X129 255 78 19 110 68 151 154 101 54
- X244 98 242 147 227 204 128 203 188 254
- X 94 217 170 251 67 231 -1 89 2 3
- X206 146 1 183 -1 209 15 150 106 90
- X184 159 64 141 55 238 195 -1 162 205
- X245 133 48 -1 59 165 121 103 88 -1
- X127 96 41 -1 97 33 -1 -1 6 131
- X187 194 138 29 167 145 81 164 75 79
- X112 31 178 66 -1 74 80 -1 172 -1
- X -1 43 224 123 130 236 -1 160 108 246
- X192 230 190 222 161 136 -1 12 200 213
- X198 239 248 107 105 139 120 -1 247 125
- X 49 76 56 199 34 10 38 111 233 -1
- X -1 -1 193 8 182 27 -1 104 240 5
- X191 115 -1 218 62 47 185 16 135 201
- X228 46 102 -1 100 140 189 208 202 13
- X 65 113 22 57 109 91
- X 90 49 26 132 156 140 212 129 -1 122
- X198 -1 97 148 38 79 25 154 80 -1
- X214 216 248 184 161 16 2 107 66 168
- X 33 -1 195 30 -1 -1 65 -1 14 84
- X222 -1 123 53 136 47 69 45 -1 1
- X125 -1 134 43 -1 102 145 126 238 194
- X 78 232 138 246 224 36 28 225 -1 46
- X130 215 120 188 119 105 231 209 60 15
- X 18 87 185 176 39 160 182 81 -1 158
- X 0 151 235 192 183 200 118 12 174 -1
- X106 -1 55 -1 -1 75 100 27 249 187
- X163 242 -1 230 254 205 179 190 96 74
- X 72 -1 9 42 241 50 57 228 142 7
- X 70 206 3 149 52 227 44 220 62 245
- X 5 221 128 186 244 56 204 -1 13 133
- X -1 91 197 165 17 -1 4 180 89 -1
- X 85 24 193 110 199 153 -1 -1 29 255
- X177 247 226 -1 98 252 83 170 237 116
- X157 191 86 94 23 82 143 109 73 219
- X117 181 93 162 59 32 -1 152 10 164
- X 95 -1 250 239 146 115 131 -1 217 77
- X234 -1 6 251 20 71 21 208 -1 189
- X137 141 40 253 64 67 172 135 127 240
- X113 76 61 -1 210 92 -1 178 58 203
- X229 124 111 -1 144 139 63 171 22 108
- X202 213 175 223 114 169
- X 60 -1 26 79 203 204 122 -1 15 97
- X -1 238 133 33 159 8 165 145 27 191
- X192 69 250 -1 -1 183 2 18 50 65
- X218 57 143 13 -1 -1 -1 93 116 213
- X -1 199 -1 171 109 74 -1 177 56 -1
- X 28 -1 -1 196 -1 227 48 31 80 221
- X 0 248 202 103 233 29 140 -1 170 21
- X216 164 137 190 45 189 -1 193 188 3
- X 58 160 155 181 176 -1 186 104 111 225
- X198 125 -1 37 -1 -1 252 9 231 223
- X169 -1 255 63 87 154 -1 -1 152 44
- X201 88 -1 -1 179 118 38 -1 115 161
- X247 123 6 121 187 91 -1 240 241 239
- X197 207 -1 12 -1 185 138 72 136 -1
- X 66 -1 234 32 150 17 254 -1 -1 226
- X144 -1 108 -1 105 82 228 172 173 14
- X 81 119 -1 -1 71 16 208 246 242 100
- X 68 43 157 158 -1 -1 84 47 229 114
- X -1 83 -1 25 230 135 86 124 78 75
- X 73 19 20 77 245 -1 53 130 90 41
- X210 110 62 4 5 244 211 131 166 219
- X200 206 220 39 -1 -1 70 -1 30 209
- X212 59 -1 99 232 89 149 55 156 178
- X184 98 224 64 142 236 235 -1 11 129
- X127 128 168 249 205 194 167 120 61 243
- X 22 -1 96 -1 146 102
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1 -1 -1 -1 -1
- X -1 -1 -1 -1 -1 -1
- END_OF_test3.perm
- if test 16800 -ne `wc -c <test3.perm`; then
- echo shar: \"test3.perm\" unpacked with wrong size!
- fi
- # end of overwriting check
- fi
- echo shar: End of archive 7 \(of 11\).
- cp /dev/null ark7isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 11 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still need to unpack the following archives:
- echo " " ${MISSING}
- fi
- ## End of shell archive.
- exit 0
-